package com.test;

public class 颜色分类 {


    public   void sortColors(int[] nums) {
    //定义三色指针
        //red指针指向0元素
        //black指针指向1元素
        //green指针指向2元素


        /*
          在起始的时候，指向0和1的指针指向数组的开头，指向2的指针指向数组的最末尾
            移动black指针，其余指针不动
           1. 当black指针指向0的时候，将black指针和red指针的数据进行交换，同时black++，red++
           2. 当black指针指向1的时候，不做处理，直接将black++
           3. 当black指针指向2的时候，将black指针和green指针的元素进行交换，同时green——，因为有可能存在green和black的值都为2的情况，所以black指针先不做++的操作
           要先再进行一轮判断，也就是1,2,3的判断
         */

        int red=0;  //0
        int black=0;  //1
        int green=nums.length-1;  //2

            while (black<=green ){
                if (nums[black]==0){
                    swap(nums,black++,red++);
                }else if (nums[black]==1){
                    black++;
                }else {
                    //等于2 的时候
                    //和绿色指针交换
                    swap(nums,black,green--);
                }
            }
    }

    private  void swap(int[] ints,int i,int j){
        int tmp=ints[i];
        ints[i]=ints[j];
        ints[j]=tmp;
    }




}
